
//1423.可获得的最大点数
class Solution {
    public:
        int maxScore(vector<int>& cardPoints, int k) {
            //此题可以转化为滑动窗口问题，求左右两边的最大值，就转化为了求中间部分的最小值
            int n=cardPoints.size();
            int num=n-k;   //计算出要求中间元素和的个数
            int left=0,right=0;
            int ret=INT_MAX,tmp=0;
    
            int sum=0;   //求数组总和
            for(auto e:cardPoints) sum+=e; 
            while(right<n)
            {
                //入窗口
                while(right-left<num)
                tmp+=cardPoints[right++];
                
                //调整答案
                ret=min(ret,tmp);
    
                //出窗口
                tmp-=cardPoints[left++];
            }
            return sum-ret;
        }
    };